/**
 * (C)2012 Exlu Corporation. All rights reserved.
 * 注意事項   :
 */
package cn.exlu.wea.field.validator.format;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import cn.exlu.wea.constant.LpLocalConst;

/**
 * 格式校验类
 * @author Mark
 * @version 1.0.1.1
 * @CreateTime 2012-12-26
 */
public class LpValidatorFormatUtil {

    /**
     * 邮箱格式判定
     * 判定方式：以字母或下划线开头+@+[字母或数字+.](可以有多个)+字母或数字2至3个字符
     * @param str 输入字段
     * @return true：是 false: 否
     */
    public static boolean isEmailFormat(String str){
        return str.matches("^[_A-Za-z0-9]+@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$");
    }
    
    /**
     * 邮政编码格式判定
     * 判定方式：
     * @param str 输入字段
     * @param lpLocalConst 地区
     * @return true：是 false: 否
     */
    public static boolean isPostalCodeFormat(String str,String lpLocalConst){
        if(LpLocalConst.CN.equals(lpLocalConst)){
            // 中国
            return str.matches("[0-9]\\d{5}(?!\\d)");
        }

        //其它
        return false;
    }

    /**
     * 日期格式判定
     * @param str 输入字段
     * @param pattern 指定格式
     * @return true：是 false: 否
     */
    public static boolean isDateFormat(String str,String pattern){
        SimpleDateFormat sdf=new SimpleDateFormat(pattern);
        try {
            sdf.parse(str);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }
    
    /**
     * 数值格式判定
     * 判定方式：1）由数字或由数字和【.】组成的字符串，且【.】不在最后位和首位
     * 2）首字符为【+】【-】和1）组成的字符串
     * @param str 输入字段
     * @return true：是 false: 否
     */
    public static boolean isDigitalFormat(String str){
        if("+".equals(str)||"-".equals(str)){
            return false;
        }
        return str.matches("^(([+|-]?[\\d]+[.]?[\\d]+)|([+|-]?[\\d]*))$");
    }
    
    /**
     * URL格式判定
     * 判定方式：1）以http、https、ftp +【 ://】字符 开头，或者没有
     * 2）后续为任意字符但不能有【.】字符开头或结尾，多个【.】字符不能连续在一起。
     * 3）可以有端口号
     * 4）地址只能是字母
     * @param str 输入字段
     * @return true：是 false: 否
     */
    public static boolean isUrlFormat(String str) {
        return str.matches("^(((?i)(http|https|ftp))://)?([a-z|A-Z]+\\.)*[a-z|A-Z]+(:[0-9]{1,5}[a-z|A-Z]*)?$");
    }
}
